home *** CD-ROM | disk | FTP | other *** search
- From news.primenet.com!nntp.news.primenet.com!news.sprintlink.net!gryphon.phoenix.net!academ!binky.capnet.state.tx.us!goblin.tdh.state.tx.us!geraldo.cc.utexas.edu!cs.utexas.edu!howland.reston.ans.net!swrinde!sgigate.sgi.com!news1.best.com!news.aimnet.com!ns2.mainstreet.net!sloth.swcp.com!news.dgsys.com!DGS.dgsys.com!raymoon Tue Apr 2 15:44:59 1996
- Path: news.primenet.com!nntp.news.primenet.com!news.sprintlink.net!gryphon.phoenix.net!academ!binky.capnet.state.tx.us!goblin.tdh.state.tx.us!geraldo.cc.utexas.edu!cs.utexas.edu!howland.reston.ans.net!swrinde!sgigate.sgi.com!news1.best.com!news.aimnet.com!ns2.mainstreet.net!sloth.swcp.com!news.dgsys.com!DGS.dgsys.com!raymoon
- From: raymoon@dgsys.com (Raymond Moon)
- Newsgroups: alt.lang.asm,comp.lang.asm.x86,news.answers,alt.answers,comp.answers
- Subject: x86 Assembly Language FAQ - General Part 1/3
- Supersedes: <4gdsi8$o9c@news.dgsys.com>
- Followup-To: alt.lang.asm,comp.lang.asm.x86
- Date: 21 Mar 1996 22:48:59 GMT
- Organization: MoonWare
- Lines: 760
- Approved: news-answers-request@MIT.EDU
- Distribution: world
- Expires: Sat, 20 Apr 1996 23:59:59 GMT
- Message-ID: <4ismcr$2tq@news.dgsys.com>
- Reply-To: raymoon@moonware.dgsys.com
- NNTP-Posting-Host: dgs.dgsys.com
- Summary: This is the FAQ for the x86 Assembly Language programmers for the
- alt.lang.asm and comp.lang.asm.x86 newsgroups. This particular section of
- the FAQ is part one of three parts that contain x86 assembly language
- information common to all assemblers.
- Keywords: x86 Assemby Language ASM FAQ General
- X-Newsreader: TIN [version 1.2 PL2]
- Xref: news.primenet.com alt.lang.asm:8420 comp.lang.asm.x86:18597 news.answers:66830 alt.answers:16272 comp.answers:17529
-
- Archive-name: assembly-language/x86/general/part1
- Posting-Frequency: monthly (21st of every month)
- Last-modified: 1996/03/19
-
- ------------------------------
-
- Subject: 1. Introduction and Intent
-
- This is the x86 Assembly Language FAQ for the comp.lang.asm.x86 and
- alt.lang.asm newsgroups. This FAQ is posted monthly on or about the 21st
- of the month on both newsgroups and news.answers, alt.answers and
- comp.answers. It also is archived at the normal FAQ archival sites and the
- SimTel mirror sites in the msdos/info directory. Lastly, the current
- version is available from my web page as:
- http://www2.dgsys.com/~raymoon/faq/asmfaq.zip
- Currently, this FAQ is broken into six sections. The following are the
- section filenames and the scope of each section of the FAQ.
-
- assembly-language/x86/general/part1 - This is the basic portion of the FAQ
- that contains information of interest to all assembly language
- programmers. In general, the information contained in this portion of
- the FAQ is not specific to any particular assembler.
-
- assembly-language/x86/general/part2 - This is a continuation of the above
- FAQ.
-
- assembly-language/x86/general/part3 - This is a continuation of the above
- FAQ.
-
- assembly-language/x86/microsoft - This portion of the FAQ contains
- information specific for the Microsoft MASM.
-
- assembly-language/x86/borland - This portion of the FAQ contains
- information specific for the Borland TASM.
-
- assembly-language/x86/a86 - This portion of the FAQ contains information
- specific for the Shareware A86 Assembler and D86 Debugger.
-
- The scope and content of this FAQ is to go beyond just answering the
- frequently asked questions. I am including pointers to assembly language
- treasure troves that are hidden out on the internet. I believe that this
- will enhance the FAQ's value not only to the novices but also to the old
- hands.
-
- Any subject listed as "OPEN" means that this topic as been requested but no
- one has come forth and volunteered to write this section. Volunteers
- please indicate your intentions to the author listed below either by
- posting to either newsgroup or by sending e-mail to the author at the below
- address.
-
- The general guidelines for submission are:
- * accuracy and conciseness;
- * pointers to where on the internet more detailed information is
- available; and
- * any code submitted will be generic so that most assemblers can assemble
- successfully.
-
- Any subject listed as "UNDER CONSTRUCTION" has a volunteer currently
- writing that subject. If you desire to assist or have some information
- that you believe would be of help in writing that particular subject,
- contact the contributor of that subject or post to both newsgroups. Once a
- subject is submitted to me, I will post it on both newsgroups for comment.
- After any changes that may be necessary are made, I will include it in the
- next posting of the FAQ.
-
- For the ease of determining what has changed since the last FAQ, the Table
- of Contents will have "REVISED" at the end of the subject line for all
- revised subjects. If more than one FAQ revision has been missed, the "Last
- Changed:" entry at the end of each subject can be used to determine which
- subjects have been revised during the intervening time frame.
-
- The information in this FAQ is free for all to use as long as you
- acknowledge the source. This FAQ can be reproduced in part or in its
- entirety as long as the copyright is included. This FAQ can be made
- available on public servers, like ftp, gopher or WWW servers. Please do
- not modify the file, such as converting it into some other format, without
- prior permission of the author.
-
- All references to files and locations are in Uniform Resource Locators
- (URLs) format. Some web browser will be able to use these URLs directly as
- hot links. If the format is not clear to you, get RFC 1738. It is
- available from: ftp://is.internic.net/rfc/rfc1738.txt
-
- Suggestions for changes and comments are always welcome. They can be
- posted to either newsgroup or e-mailed directly to the me.
-
- Author: Raymond Moon, raymoon@moonware.dgsys.com
- Copyright 1996 - Raymond Moon
- ALL RIGHTS RESERVED
- Last Changed: 17 Feb 96
-
- ------------------------------
-
- Subject: 2. Table of Contents
-
- Part I
-
- 1. Introduction and Intent
- 2. Table of Contents REVISED
- 3. Charters For comp.lang.asm.x86 and alt.lang.asm Newsgroups
- 4. What is Assembly Language
- 5. List of x86 OpCodes
- 6. What is HELPPC and Where It Is Available
- 7. How To Truncate a File
- 8. How Can STDERR Be Redirected To a File
- 9. How To Determine the CPU Type
- 10. IRQ Assignments
- 11. Ralf Brown's Interrupt List
- 12. Using VGA Mode 13h for Fast Graphics
- 13. Real Mode/Protected Mode
- 14. Shareware ASM Libraries
-
- Part II
-
- 15. How To Determine If a Problem Pentium Is Present
- 16. Accessing 4 Gegs of Memory in Real Mode
- 17. Interrupts and Exceptions
- 18. What Is Available at ftp.intel.com
- 19. ASM Books Available
- 20. ASM Code Available on Internet
- 21. How To Commit a File
- 22. Using Extended Memory Manager
- 23. EXE2BIN Replacement
- 24. ASM Tutorials Available
-
- Part III
-
- 25. Shareware Assemblers REVISED
- 26. WWW Assembly HomePages REVISED
- 27. Undocumented OpCodes
- 28. Common Reason Why Memory Allocation Fails
- 29. Volume Serial Numbers
- 30. .obj File Format
- 31. Rebooting from Software
- 32. Other FAQs
- 33. Acknowledgments
-
- ------------------------------
-
- Subject: 3. Charters For comp.lang.asm.x86 and alt.lang.asm Newsgroups
-
- To know whether or not these newsgroups will meet your needs, the purpose
- for which they were created are given below.
-
- 3.1 COMP.LANG.ASM.X86
-
- comp.lang.asm.x86 was created based upon voting on a Request for Discussion
- (RFD). The RFD for this newsgroup is:
-
- The unmoderated newsgroup comp.lang.asm.x86 is open to discussions on all
- topics related to assembly language and low-level programming on IBM
- machines with '86 processors. Appropriate topics would include, but not be
- limited to:
-
- Assembly language tips and tricks (code techniques)
- MASM, TASM, and other commercial assemblers
- Graphics, sound, and other hardware programming
- Assembly language code
- Assembly language related share/freeware
- Linking assembly language with other languages
- Etc...
-
- Topics that are discouraged are:
-
- Flames about "{Language X} is {better/worse} than ASM"
- Flames like "{Assembler 1} is {better/worse} than {Assembler 2}"
- High-level language code, except when used for hardware programming
-
- 3.2 ALT.LANG.ASM
-
- Alt newsgroups are initiated with a Proposal posting to the alt.config
- newsgroup. The proposal for alt.lang.asm is:
-
- alt.lang.asm will address the problems of machine language programmers out
- there in InterNet land. It will be a forum for discussion of coding
- techniques and efficiency problems related to machine language. The scope
- will be broad. We will not discriminate by machine architecture, race or
- sex.
-
- Contributors: Michael Averbuch, mikeaver@firefly.prairienet.org
- Raymond Moon, raymoon@moonware.dgsys.com
- Last changed: 28 Dec 94
-
- ------------------------------
-
- Subject: 4. What Is Assembly Language
-
- 4.1 WHAT IS MACHINE LANGUAGE?
-
- Although programmers tend to use C or C++ or Pascal these days, the
- language closest to the PC hardware is machine language. Not one second
- during a PC's powered on lifetime passes where the computer is not
- executing machine language.
-
- 4.2 ASSEMBLY LANGUAGE OR MACHINE LANGUAGE
-
- To word this simply, you can say that say that assembly language is a
- human-readable text, and machine language is machine-readable binary code.
- When you program in assembly language, you are programming on the machine
- language level.
-
- To program directly in machine language is teadious, so you use assembly
- language instead, and use an assembler to produce the actual machine code.
-
- 4.3 WHEN TO USE ASSEMBLY LANGUAGE
-
- I personally think that except as a learning exercise it's a waste of time
- writing something in asm that can be written acceptably fast in a
- high-level language.
-
- Assembly language fits for the following:
-
- * Low level control. When you need to change the flags, or the control
- registers of the processor, as when entering protected mode.
-
- * Speed. Programs written in machine language execute fast! It can
- execute 10-100 times the speed of BASIC, and about twice as fast as a
- program written in C or Pascal.
-
- * Time Critical Code. Critical sections of programs written in higher
- level languages, can be written in assembly to speed up sections.
-
- * Small program size. When you write a TSR for example this is very
- useful. Writing interrupt handlers is where assembly language shines.
-
- Assembly language is very flexible and powerful, anything that the hardware
- of the computer is capable of doing can be done in assembly.
-
- Contributor: Patrik Ohman, patrik@astrakan.hgs.se
- Last changed: 10 Jan 95
-
- ------------------------------
-
- Subject: 5. List Of x86 OpCodes
-
- To obtain a full listing of the instruction set, opcodes and instruction
- timing of the Intel processors, the book
-
- Pentium<tm> Family, User's Manual
- Volume 3: Architecture and Programming Manual
- ISBN 1-55512-227-12
-
- is the best source of information.
-
- This book is available directly from Intel by calling or writing:
- Intel Literature Sales
- P.O. Box 7641
- Mt. Prospect, IL 60056-7641
- (800) 548-4725
-
- Another source of information on the instruction set is the program HelpPC,
- see obtaining HELPPC elsewhere in this document.
-
- Contributor: Patrik Ohman, patrik@astrakan.hgs.se
- Last changed: 10 Jan 95
-
- ------------------------------
-
- Subject: 6. What Is HELPPC and Where Is It Available
-
- HELPPC is a Quick Reference Utility for the intermediate to advanced
- programmer. It is a shareware program written by David Jurgens. The
- latest version is 2.10
-
- The topics distributed in an easy database format are:
- BIOS interrupts;
- DOS interrupts and DOS functions;
- EMS and Mouse functions;
- BIOS and DOS data structures;
- diagnostic codes;
- DOS commands;
- 80x86 assembler instructions;
- standard and vendor specific C functions; and
- various hardware specifications.
-
- HELPPC is customizable by users. The documentation describes how users can
- incorporate their own information into the help file format. These user
- help files then can be incorporated into the database and accessed via
- HELPPC application.
-
- HELPPC comes in two versions. The first is a DOS command line program.
- The second is a TSR. The TSR supports context sensitive help within many
- editors. Only 32K is taken by the TSR version.
-
- HELPPC requires:
- DOS 2.0 or greater;
- 64K of RAM for DOS Command Line or 32K for TSR; and
- hard disk recommended.
-
- HELPPC is available specifically from:
-
- ftp://ftp.coast.net/SimTel/msdos/info/helppc21.zip
-
- HELPPC also is available from any site that mirrors the SimTel directory.
-
- Contributor: Raymond Moon, raymoon@moonware.dgsys.com
- Last changed: 28 Dec 94
-
- ------------------------------
-
- Subject: 7. How To Truncate A File
-
- There is not any single DOS Int 21h function that performs this operation.
- A file can be truncated using two functions. The procedure is:
-
- 1. Use Int 21h function 42h, Move File Pointer, to move the file pointer
- to the position where you want the file to be truncated.
- 2. Use Int 21h function 40h, Write File or Device, to write zero bytes to
- the file.
-
- Execution of the last DOS function will update the directory to the new
- file length.
-
- Contributor: Raymond Moon, raymoon@moonware.dgsys.com
- Last changed: 28 Dec 94
-
- ------------------------------
-
- Subject: 8. How Can STDERR Be Redirected To A File
-
- I understand that 4DOS has this capability at its command line. If you are
- looking in the assembly language FAQ for this information, an assembly
- language answer probably is desired. Here it is.
-
- You will need to write a short program that performs the STDERR redirection
- before loading and executing the desired program. This loader program
- relies upon the fact that a child program inherits all open files of the
- parent program unless the parent program opens a file with the inheritance
- flag set to no.
-
- Because the full code for such a program is too large for this FAQ, I will
- give are the salient specifications for such a program.
-
- 1. The loader program accepts three command line arguments:
- a. The full path and filename of the file into which STDERR is to be
- written.
- b. The full path and filename of the program to be executed.
- c. The command line for the program to be executed (should be
- delimited by double quotes to allow multiple arguments). This
- argument is optional.
- 2. Release all memory above the program using Int 21 function 4ah so that
- there will be room enough to load and execute the designated program.
- 3. Open the file from step 1.a above into which STDERR is to be written.
- 4. Duplicate STDERR filehandle, which is 2, using Int 21h function 45h.
- 5. Using Int 21h function 46h, force STDERR filehandle, again 2, to have
- the filehandle of the opened file from step 2.
- 6. Use Int 21h function 4b00h to load and execute the program from step
- 1.a. Use the default environment and the command line from step 1.c
- above.
- 7. Upon return from the function 4b00h, close the file opened in step 2.
- 8. To restore STDERR, use Int 21h function 46h to force STDERR, again 2,
- to point to the filehandle saved from step 3 above.
-
- This same technique can be applied to any of the standard devices.
-
- I have written a full featured demonstration program. I believe that asm
- programmers will find the source code useful even if they do not want to
- redirect stderr to a file. The URL to the file is:
-
- ftp://ftp.coast.net/SimTel/msdos/asmutil/stderrf.zip
-
- Contributor: Raymond Moon, raymoon@moonware.dgsys.com
- Last changed: 3 Jun 95
-
- ------------------------------
-
- Subject: 9. How To Determine The CPU Type
-
- 9.1 CPUID PROGRAM
-
- The type of processor and math coprocessor can be determined using two
- functions that have been provided by Intel. The source code to these
- functions can be obtained from Intel by:
-
-
- ftp://ftp.intel.com/pub/IAL/tools_utils_demos/cpuid3.zip
-
- Three source files are included in this .zip file.
- cpuid3a.asm - This source code file contains two assembly language
- functions. One determines the type of cpu from 8088/8086 to
- Pentium. The second detects and identifies, if present, the type
- of math coprocessor.
- cpuid3b.c - a c program that calls the above two functions and displays
- the results.
- cpuid3c.asm - this is an assembly program equivalent to cpuid3b.c.
-
- 9.2 CPUID INSTRUCTION
-
- On some 486 and all Pentium processors, Intel has included an undocumented
- CPUID instruction. More information on this instruction and how to tell if
- a processor supports this instruction, see Ralf Brown's OPCODE.LST, Subject
- #11).
-
- You also can get the word directly from Intel
-
- ftp://ftp.intel.com/pub/IAL/Software_specs/cpuap.zip
-
- The file in the .zip file describes the CPUID instruction, explains the
- evolution of CPU detections strategies and includes the source code for the
- CPUID program. UNFORTUNATELY, the format for the file is a postscript
- print file. To get a human readable copy, it must be sent to a postscript
- viewer or printer!
-
- 9.3 Robert Collins' CPUID.ASM
-
- Robert Collins has posted a his version of cpuid which will detect the P6
- or Pentium Pro. To date, checking the above Intel site, I could not find
- an updated Intel routine.
-
- ftp://ftp.x86.org/x86/source/CPUID/CPUID.ASM
-
- Contributor: Raymond Moon, raymoon@moonware.dgsys.com
- Last changed: 11 Nov 95
-
- ------------------------------
-
- Subject: 10. IRQ Assignments
-
- A list of IRQ assignments are available in David Jurgens' HELPPC database.
- See Subject #6 for details on how to obtain this program.
-
- Contributor: Raymond Moon, raymoon@moonware.dgsys.com
- Last changed: 28 Dec 94
-
- ------------------------------
-
- Subject: 11. Ralf Brown's Interrupt List
-
- 11.1 FILE AVAILABILITY
-
- The latest version of Ralf Brown's Interrupt List is 4.9. The files are
- available directly from his home page, from SimTel, or Garbo:
-
- http://www.cs.cmu.edu/afs/cs.cmu.edu/ralf/pub/WWW/files.html
- ftp://ftp.coast.net/SimTel/msdos/info
- ftp://garbo.uwasa.fi/pc/programming
-
- The files are:
- inter48a.zip Comprehensive listing of interrupt calls, 1 of 4
- inter48b.zip Comprehensive listing of interrupt calls, 2 of 4
- inter48c.zip Comprehensive listing of interrupt calls, 3 of 4
- inter48d.zip Comprehensive listing of interrupt calls, 4 of 4
- inter48e.zip Hypertext/utility programs for interrupt list
- inter48f.zip WinHelp conversion programs for interrupt list
- inter48z.zip HC31/HCP phrases file for interrupt list
- intwin48.zip WINHELP hypertext
-
- 11.2 DESCRIPTION
-
- This interrupt list is an extensive listing of functions available through
- interrupt and FAR calls. Both documented and undocumented calls are
- included. Also available are maps of CMOS and BIOS memory and I/O ports.
- The current release contains 7,800 entries and over 3,100 tables.
-
- 11.3 WHAT IS NEW
-
- Version 4.7:
- HP 100LX/200LX calls, some Windows95, XMZ, LAN Manager data structures,
- Linux DOSEMU, NetWare printing and VLMs, HugeRealMode Server, GO! Directory
- locator, XDF. Plus, a significantly expanded PORTS.LST and a reformatted
- MEMORY.LST
-
- Version 4.8:
- 380K of new information (400 new calls), including Pentium Local APIC,
- ATA-2/ATA-3 IDE specs, Bootable CD-ROM specification, Enhanced Disk Drive
- Spec v1.1, PCI BIOS v2.1, EPP BIOS v7, Multiprocessor Specification, Smart
- Battery protocol, additional Plug-and Play info, Atari Portfolio, HP Hornet
- chipset, MODAL PC, K3PLUS updates, WinDOS, many additional NetWare
- functions, many additional I/O ports. Updated OPCODES.LST, new file
- TABLES.LST containing pointers to selected tables, new list viewer IVIEW.
-
- Version 4.9:
- Zfax v4, BSC/SDLC ports, Q87 v4, I1541, CauseWay v1.3 DOS extender,
- additional I/O ports, and updated OPCODES.LST.
-
- 11.4 VIEWERS
-
- Ralf Brown has included quite a few viewers. They are included as embedded
- .zip files. I would unzip them into separate files and determine which one
- best fits your needs.
-
- 11.5 OTHER INCLUDED GEMS
-
- OVERVIEW.LST - A brief description of each of the 256 interrupts.
- 86BUGS.LST - A list of undocumented and buggy instructions with
- descriptions of the x86 Intel processor and compatible processors. And
- you thought that the Intel FDIV was the first bug in a processor!
- CMOS.LST - a CMOS memory map.
- OPCODE.LST - A list of undocumented instructions and documented
- instructions of any last processor.
- PORTS.LST - I/O port addressed for XT, AT and PS/2 computers.
- GLOSSARY.LST - glossary of PC terms.
- MEMORY.LST - The format for various memory locations, such as the BIOS Data
- Segment, Interrupt Vector Table, and much, much more.
- INTERRUP.PRI - iAPX 86 Interrupt Primer
-
- Contributor: Raymond Moon, raymoon@moonware.dgsys.com
- Last changed: 17 Feb 96
-
- ------------------------------
-
- Subject: 12. Using VGA Mode 13h for Fast Graphics
-
- 12.1 INTRODUCTION AND PREPARATION
-
- Mode 13h is so widely used for graphics applications in DOS because it is
- very easy to use. The screen is constantly being redrawn by the video
- card. To affect what the card draws, it is necessary to write to the
- screen buffer. The screen buffer in mode 13h is always at segment:offset =
- A000:0000. Thus, to set up drawing directly to the video buffer, this is
- what you'd most often first do:
-
- ;Change the video mode to 13h
- xor ah, ah ;VIDEO Function 00h: Change screen
- mov al, 13h ;Put the desired graphics mode into AL
- int 10h ;Call VIDEO
-
- ;Prepare for writing to the video buffer
- mov di, 0a000h ;Put the video segment into DI
- mov es, di ; so it can easily be put into ES
- xor di, di ;Start writing at coordinates (0,0)
-
- 12.2 WRITING PIXELS TO THE SCREEN
-
- Why is Mode 13h so popular? To understand, you must know a few basic
- facts. In Mode 13h, the screen is 320 by 200, or 320 pixels across and 200
- pixels down. In each pixel, there's a possibility of 256 colors, which can
- be fit into one byte. Thus, 320*200*1 = 64000 bytes, about the size of one
- segment. Think of the screen as an array of colors. The first row takes
- up addresses A000:0000 to A000:013F (decimal 319), the second row takes up
- addresses A000:0140 to A000:027F (decimal 639), and so on. To plot a
- pixel, assuming ES=A000:
-
- ;Plot a pixel in video mode 13h, where
- ;PixelAddress = (320 * Y) + X
- mov ax, 320 ; Prepare for the multiplication
- mul [Y] ; Assuming that Y is defined in the data segment
- ; earlier in the program
- mov di, ax ; Put in into the pointer to the offset of ES
- add di, [X] ; Assuming that X is defined in the data segment
- ; earlier in the program
- mov al, [Color] ; Assuming that Color is defined in the data
- ; segment earlier in the program
- stosb ; Write it to the screen!
-
- See how easy that was? Something to remember is that it is zero-based.
- The upper-left corner is (0,0), and the lower-right is (319,199). A
- complete TASM Ideal mode procedure might look something like this (it
- assumes that the video card is already set to mode 13h):
-
- PROC WritePixel BASIC ; Or whatever language you might want to link
- ; it to
- USES es, di ; It's always a good idea to preserve ES and DI
- ARG X:word, Y:word, Color:BYTE
- mov di, 0a000h ; Put the video segment into DI
- mov es, di ; so it can easily be put into ES
- mov ax, 320 ; Prepare for the multiplication
- mul [Y] ; Offset pointer by the Y value passed in
- mov di, ax ; Put in into pointer to the offset of ES
- add di, [X] ; Offset the pointer by the X value passed in
- mov al, [Color] ; Put color to be written to the screen in AL
- stosb ; Write it to the screen!
- ret
- ENDP WritePixel
-
- To write a horizontal line, just put the length in CX, and replace the
- STOSB with a REP STOSB. Writing a vertical line is only a little more
- tricky. Observe the following TASM Ideal mode procedure:
-
- PROC VerticalLine BASIC ; Or whatever language you might want to link
- ; it to
- USES es, di ; It's always a good idea to preserve ES and
- ; DI
- ARG X:word, Y:word, Color:BYTE, Length:word
- mov di, 0a000h ; Put the video segment into DI
- mov es, di ; so it can easily be put into ES
- mov ax, 320 ; Prepare for the multiplication
- mul [Y] ; Offset the pointer by the Y value passed in
- mov di, ax ; Put in into the pointer to the offset of ES
- add di, [X] ; Offset the pointer by the X value passed in
- mov al, [Color] ; Put the color to be written to the screen
- ; in AL
- mov cx, [Length] ; Prepare for the loop
- YLoop:
- stosb ; Write it to the screen!
- add di, 319 ; Move down one row (DI has already advanced
- ; once because of the STOSB, thus the 319)
- loop YLoop
- ret
- ENDP VerticleLine
-
- Observe how there is a tight loop that moves DI down one row each
- iteration.
-
- In short, the easiest way to write directly to the Mode 13h video buffer is
- to think of the screen as just a 320 by 200 array of bytes, starting at
- A000:0000.
-
- Author: Michael Averbuch (mikeaver@prairienet.org)
- Last Change: 29 Dec 94
-
- ------------------------------
-
- Subject: 13. Real Mode/Protected Mode
-
- 13.1 AVAILABILITY
-
- [Note: because of a crash at zfja-gate, the below information of files on
- zfja-gate may not be accurate.]
-
- All the files below are available from:
- ftp://zfja-gate.fuw.edu.pl/user/net/ka9q/guest/cpu/protect.mod
-
- The authors e-mail addresses are given below.
-
- These files can be received by e-mail. Send e-mail to:
-
- listserv@zfja-gate.fuw.edu.pl
-
- with GET CPU/PROTECT.MOD/PMFAQ/* in the text.
-
- A .zip file with all the latest files described below has been uploaded to
- SimTel but as of 19 Dec has not been made available for download. The URL
- to this file when available should be:
-
- ftp://ftp.coast.net/SimTel/msdos/info/pmtut0002.zip
-
- Watch this site or for the upload announcement in the newsgroups.
-
- 13.2 FAQ - PMFAQ.ZIP
-
- This file contains a preliminary protected mode FAQ by Jerzy Tarasiuk.
-
- 13.3 TUTORIAL - PMTUT002.ZIP
-
- Till Gerken has written a Protected Mode Tutorial. This tutorial contains
- code and applicable function calls that comprise the Virtual Control
- Program Interface (VCPI). Till Gerken's tutorial is available:
-
- ftp://x2ftp.oulu.fi/pub/msdos/programming/pmode/pmtut002.zip
-
- 13.4 SAMPLE ASM CODE - SIMPL_PM.ASM
-
- Jerzy Tarasiuk has posted an example program switching to Protected Mode
- and back to again to Real Mode.
-
- 13.5 REAL MODE IDT SWITCHING - CHANGIDT.FAQ
-
- Lastly Jerzy Tarasiuk has included some of his e-mail that covers real mode
- IDT switching.
-
- Contributors: Till Gerken <tig@ngo.ol.ni.schule.de> and
- Jerzy Tarasiuk <JT@zfja-gate.fuw.edu.pl>
- Last changed: 19 Dec 95
-
- ------------------------------
-
- Subject: 14. Shareware ASM Libraries
-
- 14.1 ASMLIB PROGRAMMER'S TOOLKIT, VERSION 3.7
-
- Douglas Herr's shareware assembly language library. This library is
- available from SimTel.
-
- ftp://ftp.coast.net/SimTel/msdos/asmutil/asmlib37.zip
-
- The zip file contains only the medium model of the library. There are 405
- assembly subroutines in a .lib file and documentation. Source code is
- available with registration and extra fee. The library covers the
- following areas:
- string/integer data manipulation
- disk & file subroutines
- EMS and XMS subroutines
- floating-point subroutines
- graphics
- keyboard input subroutines
- screen mode subroutines
- text-mode multi-window subroutines
- mathematical solutions
- subroutines which determine PC status
- text-mode video subroutines
-
- asmlib37 also comes with an editor, E16, written entire with asmlib.
-
- 14.2 THE ASSEMBLY WIZARD'S LIBRARY, VERSION 1.6
-
- This is Thomas Hanlin's shareware assembly language library. This library
- is available from SimTel.
-
- ftp://ftp.coast.net/SimTel/msdos/asmutil/asmwiz16.zip
-
- This library comes with documentation and one .lib file that supports small
- and tiny memory models. Source code is available with registration. The
- library covers the following areas:
-
- Base Conversions Mouse Services
- Exception Handling Sound and Music
- Delays and Countdowns String Services
- File Handling Telecommunications
- Filename Manipulation Time and Date
- Keyboard Services Video Services
- Long Integer Math Miscellaneous Services
- Memory Services
-
- 14.3 UCR Standard Library for Assembly Language Programmers
-
- This library is written by Randall Hyde and others. This library is
- available from SimTel.
-
- ftp://ftp.coast.net/SimTel/msdos/asmutil/stdlib.zip
-
- Unlike the previous libraries, there is no registrations fees and the
- included source code is released to the public domain. The author does
- request that if you use the library, you contribute at least one routine to
- the library.
-
- Standard Input Routines Character Set Routines
- Standard Output Routines Memory Management Routines
- Conversion Routines String Handling Routines
- Utility Routines
-
- 14.4 ALIB Version 3.0
-
- ALIB is Jeff Ownens' shareware assembly language library. This library is
- available from SimTel.
-
- ftp://ftp.coast.net/SimTel/msdos/asmutil/alib30.zip
-
- Like the UCR library described above, registration fees are not requested.
- The library consists of 179 assembly source files covering the following
- areas:
-
- compress - data compression and expansion
- config - program configuration, colors, paths, etc.
- compare - compare strings
- convert - hex/decimal/ascii conversions
- database - simple database functions
- disk - disk information, path changes, file searches
- display - fast display functions, write to display memory
- error - error handlers
- float - simple floating point math package
- math - dword math, crc, roots
- memory - memory manager, extended, xms, ems, conventional
- menu - menuing system
- message - messages in windows on screen
- misc - misc routines
- mouse/key - mouse and keyboard functions
- parse - extraction of parameters from command line
- random - random number generators
- search - search for character or string
- sort - sort buffer or file
- sound - sounds
- string - ascii string handling
- stdout - characters, strings, spaces to stdout
- system - system interrogation and setup
- time - time and date conversions
-
- Contributor: Raymond Moon, raymoon@moonware.dgsys.com
- Last changed: 1 Jan 95
-
-
-